package com.gofaraway.common.exception.v2;

import lombok.Getter;

/**
 * 基础错误信息常量
 *
 * @author ChenPeng
 * @Date 2024/7/24 16:23
 */
@Getter
public enum CommonErrorConstants {

    /**
     * 系统异常
     */
    SYS_GENERAL_ERROR(new BaseErrorInfoImpl("Sys.General.Error", "系统异常${0:}")),
    /**
     * 系统未知异常
     */
    SYS_UNKNOWN_ERROR(new BaseErrorInfoImpl("Sys.General.Unknown", "系统发生未知异常${0:}")),
    /**
     * 接口已废弃
     */
    SYS_API_DEPRECATED(new BaseErrorInfoImpl("Sys.Api.Deprecated", "${0:接口}已废弃")),
    /**
     * 外部依赖错误
     */
    SYS_DEPENDENT_SERVICE_ERROR(new BaseErrorInfoImpl("Sys.DependentService.Error", "系统依赖的外部服务错误${0:}")),
    /**
     * 外部依赖超时
     */
    SYS_DEPENDENT_SERVICE_TIMEOUT(new BaseErrorInfoImpl("Sys.DependentService.TIMEOUT", "系统依赖的外部服务超时${0:}")),
    /**
     * 通用业务异常
     */
    BIZ_GENERAL_ERROR(new BaseErrorInfoImpl("Biz.General.Error", "出错了 ${0:}")),

    /**
     * 通用参数错误异常，主要用于统一异常处理返回统一的校验结果
     */
    BIZ_PARAM_ILLEGAL(new BaseErrorInfoImpl("Biz.Param.Illegal", "参数错误${0:}")),

    /**
     * 参数不能为空
     */
    BIZ_PARAM_NOT_BE_NULL(new BaseErrorInfoImpl("Biz.Param.NotBeNull", "${0:参数}不能为空")),

    /**
     * 资源不存在，一般是用户传的 id 对应的记录不存在
     */
    BIZ_PARAM_SRC_NOT_EXISTS(new BaseErrorInfoImpl("Biz.Param.SrcNotExists", "${0:资源}不存在${1:}")),

    /**
     * 资源已存在，一般是违反了唯一约束
     */
    BIZ_PARAM_SRC_EXISTED(new BaseErrorInfoImpl("Biz.Param.SrcExisted", "${0:资源}已存在")),

    /**
     * 状态错误
     */
    BIZ_STATUS_ERROR(new BaseErrorInfoImpl("Biz.Status.Error", "${0:}状态错误")),

    /**
     * 空结果
     */
    BIZ_STATUS_EMPTY_RESULT(new BaseErrorInfoImpl("Biz.Status.EmptyResult", "没有查到数据${0:}")),

    /**
     * 操作失败
     */
    BIZ_OPERATE_FAIL(new BaseErrorInfoImpl("Biz.Operate.FAIL", "操作失败, 请稍候重试${0:}")),

    /**
     * 禁止操作
     */
    BIZ_OPERATE_FORBIDDEN(new BaseErrorInfoImpl("Biz.Operate.Forbidden", "不能操作${0:}")),

    /**
     * 重复操作
     */
    BIZ_OPERATE_REPEATED(new BaseErrorInfoImpl("Biz.Operate.Repeated", "请勿重复操作${0:}")),

    /**
     * 无权访问
     */
    BIZ_PERMISSION_ILLEGAL(new BaseErrorInfoImpl("Biz.Permission.Illegal", "您无权访问${0:}")),

    /**
     * 权限过期
     */
    BIZ_PERMISSION_EXPIRED(new BaseErrorInfoImpl("Biz.Permission.Expired", "您的权限已过期${0:}")),

    /**
     * 登录状态已过期
     */
    BIZ_LOGIN_EXPIRED(new BaseErrorInfoImpl("Biz.Login.Expired", "登录状态已过期${0:}")),

    /**
     * 未登录
     */
    BIZ_LOGIN_NOT_LOGIN(new BaseErrorInfoImpl("Biz.Login.NotLogin", "请您先登录${0:}")),

    /**
     * 登录状态异常
     */
    BIZ_LOGIN_ERROR(new BaseErrorInfoImpl("Biz.Login.Error", "登录状态异常${0:}")),

    /**
     * 用户不存在啊
     */
    BIZ_USER_NOT_EXIST(new BaseErrorInfoImpl("Biz.User.NotExist", "请先注册")),

    /**
     * 用户不存在啊
     */
    BIZ_ORGANIZATION_NOT_EXIST(new BaseErrorInfoImpl("Biz.Organization.NotExist", "请先加入组织")),

    /**
     * 计重方式错误（1、WEIGHT重量，2、TRUCK车辆）
     */
    BIZ_WEIGHT_TYPE_ERROR(new BaseErrorInfoImpl("Biz.WeightType.Error", "计重方式错误")),

    /**
     * 所选时间超出范围
     */
    BIZ_TIME_RANGE_ERROR(new BaseErrorInfoImpl("Biz.Time.Range.Error", "所选时间超出范围")),
    /**
     * 并发修改
     */
    BIZ_CONCURRENT_MODIFICATION(new BaseErrorInfoImpl("Biz.Concurrent.Modification", "操作过于频繁，请稍候再试${0:}"));;

    private BaseErrorInfo errorInfo;

    CommonErrorConstants(BaseErrorInfo baseErrorInfo) {
        this.errorInfo = baseErrorInfo;
    }
}
